/*
 * @lc app=leetcode.cn id=275 lang=cpp
 *
 * [275] H指数 II
 */

// @lc code=start
class Solution
{
 public:
  int hIndex(vector<int>& nums)
  {
    if (nums.empty()) return 0;
    int n = nums.size();
    int l = 0, r = n;
    // 用模板二思考有个地方通不过
    while (l < r)
    {
      int mid = l + r >> 1;
      // check函数： >= n - mid这个结合实际的例子理解  不需要+1
      // [0 1 3 5 6]
      // >=6-3=3
      if (nums[mid] >= n - mid)
        r = mid;
      else
        l = mid + 1;
    }

    return n - l;

    // acwing的思路
    // while(l<r)
    // {
    //   int mid=l+r>>1;
    //   if(nums[nums.size()-mid]>mid)
    // }
  }
};
// @lc code=end
